<!doctype html><html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <title>2-1 pageHelpe的使用</title>
  <meta name="generator" content="CherryTree">
  <link rel="stylesheet" href="styles.css" type="text/css" />
</head>
<body><div class="main"><div class="tree">
<p><strong>Index</strong></p>
<p><a href="笔记本--java--项目--ssm综合练习_权限管理.html">ssm综合练习 权限管理</a></p>

<ol>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--1_数据库表预览.html">1 数据库表预览</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--2_maven聚合工程的创建.html">2 maven聚合工程的创建</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--3_产品操作.html">3 产品操作</a></li>
<ol>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--3_产品操作--3-0_数据库创建与表结构.html">3-0 数据库创建与表结构</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--3_产品操作--3-1_创建实体类.html">3-1 创建实体类</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--3_产品操作--3-2_持久层接口.html">3-2 持久层接口</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--3_产品操作--3-3_编写业务层.html">3-3 编写业务层</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--3_产品操作--3-4_web层代码.html">3-4 web层代码</a></li>
<ol>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--3_产品操作--3-4_web层代码--3-4-1_完善__格式化时间和状态.html">3-4-1 完善  格式化时间和状态</a></li>
</ol>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--3_产品操作--3-5_product-list.jsp页面制作.html">3-5 product-list.jsp页面制作</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--3_产品操作--3-6_添加产品.html">3-6 添加产品</a></li>
</ol>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--4_订单操作.html">4 订单操作</a></li>
<ol>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--4_订单操作--1_查询所有信息.html">1 查询所有信息</a></li>
<ol>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--4_订单操作--1_查询所有信息--1-1_会员信息表和订单数据库表，旅客表.html">1-1 会员信息表和订单数据库表，旅客表</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--4_订单操作--1_查询所有信息--1-2_实体类.html">1-2 实体类</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--4_订单操作--1_查询所有信息--1-3_dao.html">1-3 dao</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--4_订单操作--1_查询所有信息--1-4_service.html">1-4 service</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--4_订单操作--1_查询所有信息--1-5_controller.html">1-5 controller</a></li>
</ol>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--4_订单操作--2_分页查询所有.html">2 分页查询所有</a></li>
<ol>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--4_订单操作--2_分页查询所有--2-1_pageHelpe的使用.html">2-1 pageHelpe的使用</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--4_订单操作--2_分页查询所有--2-2_分页查询.html">2-2 分页查询</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--4_订单操作--2_分页查询所有--2-3_视图分页.html">2-3 视图分页</a></li>
</ol>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--4_订单操作--3_查询详情.html">3 查询详情</a></li>
</ol>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--5_权限.html">5 权限</a></li>
<ol>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--5_权限--1_springSecurity.html">1 springSecurity</a></li>
<ol>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--5_权限--1_springSecurity--1_配置文件登录基础使用.html">1 配置文件登录基础使用</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--5_权限--1_springSecurity--2_自定义页面.html">2 自定义页面</a></li>
</ol>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--5_权限--2_使用springSecurity数据库验证登录.html">2 使用springSecurity数据库验证登录</a></li>
<ol>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--5_权限--2_使用springSecurity数据库验证登录--1_创建数据库和实体类.html">1 创建数据库和实体类</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--5_权限--2_使用springSecurity数据库验证登录--2_修改web.xml文件.html">2 修改web.xml文件</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--5_权限--2_使用springSecurity数据库验证登录--3_添加springSecurity.xml.html">3 添加springSecurity.xml</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--5_权限--2_使用springSecurity数据库验证登录--4_service曾接口.html">4 service曾接口</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--5_权限--2_使用springSecurity数据库验证登录--5_mapper.html">5 mapper</a></li>
</ol>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--5_权限--3_查询所有用户.html">3 查询所有用户</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--5_权限--4_添加用户.html">4 添加用户</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--5_权限--4-1_添加用户加密.html">4-1 添加用户加密</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--5_权限--4-2_加密密码登录.html">4-2 加密密码登录</a></li>
</ol>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--6_用户详情.html">6 用户详情</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--7_角色.html">7 角色</a></li>
<ol>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--7_角色--1_添加角色.html">1 添加角色</a></li>
</ol>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--8_权限查询和添加.html">8 权限查询和添加</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--9_用户和角色的关联.html">9 用户和角色的关联</a></li>
<ol>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--9_用户和角色的关联--1_用户添加角色.html">1 用户添加角色</a></li>
</ol>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--10_角色关联权限.html">10 角色关联权限</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--11_方法级别的权限控制.html">11 方法级别的权限控制</a></li>
<ol>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--11_方法级别的权限控制--1_JSR-250.html">1 JSR-250</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--11_方法级别的权限控制--2_secured.html">2 secured</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--11_方法级别的权限控制--3_表达式注解.html">3 表达式注解</a></li>
</ol>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--12_页面使用权限标签.html">12 页面使用权限标签</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--13_AOP切面通知.html">13 AOP切面通知</a></li>
<li><a href="笔记本--java--项目--ssm综合练习_权限管理--14_页面查看日志.html">14 页面查看日志</a></li>
</ol></div>
<div class="page"><h1><b><u>2-1 pageHelpe的使用</u></b></h1><br /><br />PageHelper是国内非常优秀的一款开源的mybatis分页插件，它支持基本主流与常用的数据库，例如mysql、<br />oracle、mariaDB、DB2、SQLite、Hsqldb等<br /><br />本项目在 github 的项目地址：<a href="https://github.com/pagehelper/Mybatis-PageHelper">https://github.com/pagehelper/Mybatis-PageHelper</a><br />本项目在 gitosc 的项目地址：<a href="http://git.oschina.net/free/Mybatis_PageHelper">http://git.oschina.net/free/Mybatis_PageHelper</a><br /><br /><br />PageHelper使用<br />1.集成<br />引入分页插件有下面2种方式，推荐使用 Maven 方式。<br />引入 Jar 包<br />你可以从下面的地址中下载最新版本的 jar 包<br /><a href="https://oss.sonatype.org/content/repositories/releases/com/github/pagehelper/pagehelper/">https://oss.sonatype.org/content/repositories/releases/com/github/pagehelper/pagehelper/</a><br /><a href="http://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/">http://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/</a><br />由于使用了sql 解析工具，你还需要下载 jsqlparser.jar：<br /><a href="http://repo1.maven.org/maven2/com/github/jsqlparser/jsqlparser/0.9.5/">http://repo1.maven.org/maven2/com/github/jsqlparser/jsqlparser/0.9.5/</a><br />2. 使用 Maven<br />在 pom.xml 中添加如下依赖<br />    &lt;dependency&gt;<br />        &lt;groupId&gt;com.github.pagehelper&lt;/groupId&gt;<br />        &lt;artifactId&gt;pagehelper&lt;/artifactId&gt;<br />        &lt;version&gt;最新版本&lt;/version&gt;<br />    &lt;/dependency&gt;<br />    <br />配置<br />    特别注意，新版拦截器是 com.github.pagehelper.PageInterceptor 。 com.github.pagehelper.PageHelper 现<br />在是一个特殊的 dialect 实现类，是分页插件的默认实现类，提供了和以前相同的用法。<br /><br /> 在 MyBatis 配置 xml 中配置拦截器插件<br /><div class="codebox"><div class="codebox">&lt;plugins&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;com.github.pagehelper为PageHelper类所在包名&nbsp;--&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;plugin&nbsp;interceptor=<span style="color:#3ad900;font-weight:400">"com.github.pagehelper.PageInterceptor"</span>&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;使用下面的方式配置参数，后面会有所有的参数介绍&nbsp;--&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=<span style="color:#3ad900;font-weight:400">"param1"</span>&nbsp;value=<span style="color:#3ad900;font-weight:400">"value1"</span>/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/plugin&gt;<br />&lt;/plugins&gt;</div></div><br /><br /> 在 Spring 配置文件中配置拦截器插件<br />    使用 spring 的属性配置方式，可以使用 plugins 属性像下面这样配置：<br />    <div class="codebox"><div class="codebox">&lt;bean&nbsp;id=<span style="color:#3ad900;font-weight:400">"sqlSessionFactory"</span>&nbsp;<span style="color:#80ffbb;font-weight:400">class</span>=<span style="color:#3ad900;font-weight:400">"org.mybatis.spring.SqlSessionFactoryBean"</span>&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;注意其他配置&nbsp;--&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=<span style="color:#3ad900;font-weight:400">"plugins"</span>&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;array&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean&nbsp;<span style="color:#80ffbb;font-weight:400">class</span>=<span style="color:#3ad900;font-weight:400">"com.github.pagehelper.PageInterceptor"</span>&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=<span style="color:#3ad900;font-weight:400">"properties"</span>&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--使用下面的方式配置参数，一行配置一个&nbsp;--&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;params=value1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/value&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/property&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/bean&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/array&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/property&gt;<br />&lt;/bean&gt;</div></div><br />    <br />    分页插件参数介绍<br />    <br />1. helperDialect ：分页插件会自动检测当前的数据库链接，自动选择合适的分页方式。 你可以配置<br />helperDialect 属性来指定分页插件使用哪种方言。配置时，可以使用下面的缩写值：<br />oracle , mysql , mariadb , sqlite , hsqldb , postgresql , db2 , sqlserver , informix , h2 , sqlserver201<br />2 , derby<br />特别注意：使用 SqlServer2012 数据库时，需要手动指定为 sqlserver2012 ，否则会使用 SqlServer2005 的<br />方式进行分页。<br />你也可以实现 AbstractHelperDialect ，然后配置该属性为实现类的全限定名称即可使用自定义的实现方<br />法。<br />2. offsetAsPageNum ：默认值为 false ，该参数对使用 RowBounds 作为分页参数时有效。 当该参数设置为<br />true 时，会将 RowBounds 中的 offset 参数当成 pageNum 使用，可以用页码和页面大小两个参数进行分<br />页。<br />3. rowBoundsWithCount ：默认值为 false ，该参数对使用 RowBounds 作为分页参数时有效。 当该参数设置<br />为 true 时，使用 RowBounds 分页会进行 count 查询。<br />4. pageSizeZero ：默认值为 false ，当该参数设置为 true 时，如果 pageSize=0 或者 RowBounds.limit =<br />0 就会查询出全部的结果（相当于没有执行分页查询，但是返回结果仍然是 Page 类型）。<br />5. reasonable ：分页合理化参数，默认值为 false 。当该参数设置为 true 时， pageNum&lt;=0 时会查询第一<br />页， pageNum&gt;pages （超过总数时），会查询最后一页。默认 false 时，直接根据参数进行查询。<br />6. params ：为了支持 startPage(Object params) 方法，增加了该参数来配置参数映射，用于从对象中根据属<br />性名取值， 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable ，不配置映射的用默认值， 默认<br />值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero<br />。<br />7. supportMethodsArguments ：支持通过 Mapper 接口参数来传递分页参数，默认值 false ，分页插件会从查<br />询方法的参数值中，自动根据上面 params 配置的字段中取值，查找到合适的值时就会自动分页。 使用方法<br />可以参考测试代码中的 com.github.pagehelper.test.basic 包下的 ArgumentsMapTest 和<br />ArgumentsObjTest 。<br />8. autoRuntimeDialect ：默认值为 false 。设置为 true 时，允许在运行时根据多数据源自动识别对应方言<br />的分页 （不支持自动选择 sqlserver2012 ，只能使用 sqlserver ），用法和注意事项参考下面的场景五。<br />9. closeConn ：默认值为 true 。当使用运行时动态数据源或没有设置 helperDialect 属性自动获取数据库类<br />型时，会自动获取一个数据库连接， 通过该属性来设置是否关闭获取的这个连接，默认 true 关闭，设置为<br />false 后，不会关闭获取的连接，这个参数的设置要根据自己选择的数据源来决定<br /><br />基本使用<br />PageHelper的基本使用有6种，大家可以查看文档，最常用的有两种<br />3.2.4.1. RowBounds方式的调用（了解）<br />List&lt;Country&gt; list = sqlSession.selectList("x.y.selectIf", null, new RowBounds(1, 10));<br /><br />使用这种调用方式时，你可以使用RowBounds参数进行分页，这种方式侵入性最小，我们可以看到，通过<br />RowBounds方式调用只是使用了这个参数，并没有增加其他任何内容。<br />分页插件检测到使用了RowBounds参数时，就会对该查询进行物理分页。<br />关于这种方式的调用，有两个特殊的参数是针对 RowBounds 的，你可以参看上面的分页插件参数介绍<br />注：不只有命名空间方式可以用RowBounds，使用接口的时候也可以增加RowBounds参数，例如<br /><br />//这种情况下也会进行物理分页查询<br />    List&lt;Country&gt; selectAll(RowBounds rowBounds);<br />注意： 由于默认情况下的 RowBounds 无法获取查询总数，分页插件提供了一个继承自 RowBounds 的<br /><br />    PageRowBounds ，这个对象中增加了 total 属性，执行分页查询后，可以从该属性得到查询总数。<br /><br />3 PageHelper.startPage 静态方法调用（重点）<br /><br />这种方式是我们要掌握的 在你需要进行分页的 MyBatis 查询方法前调用PageHelper.startPage 静态方法即可，紧<br />跟在这个方法后的第一个MyBatis 查询方法会被进行分页。<br />    //获取第1页，10条内容，默认查询总数count<br />    PageHelper.startPage(1, 10);<br />    //紧跟着的第一个select方法会被分页<br />    List&lt;Country&gt; list = countryMapper.selectIf(1);<br /></div></div>
</body></html>